<!doctype html>
<html lang="en" class="no-js">

  <!-- Mirrored from flatbuffers.dev/schema/ by HTTrack Website Copier/3.x [XR&CO'2014], Thu, 08 May 2025 07:01:57 GMT -->
  <!-- Added by HTTrack --><meta http-equiv="content-type"
    content="text/html;charset=utf-8" /><!-- /Added by HTTrack -->
  <head>

    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1">

    <link rel="canonical" href="index.html">

    <link rel="prev" href="../flatc/index.html">

    <link rel="next" href="../evolution/index.html">

    <link rel="icon" href="../assets/images/favicon.png">
    <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.9">

    <title>Overview（概述） - FlatBuffers Docs （文档）</title>

    <link rel="stylesheet" href="../assets/stylesheets/main.4af4bdda.min.css">

    <link rel="stylesheet"
      href="../assets/stylesheets/palette.06af60db.min.css">

    <link rel="preconnect" href="https://fonts.gstatic.com/" crossorigin>
    <link rel="stylesheet"
      href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&amp;display=fallback">
    <style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>

    <script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>

  </head>

  <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo"
    data-md-color-accent="indigo">

    <input class="md-toggle" data-md-toggle="drawer" type="checkbox"
      id="__drawer" autocomplete="off">
    <input class="md-toggle" data-md-toggle="search" type="checkbox"
      id="__search" autocomplete="off">
    <label class="md-overlay" for="__drawer"></label>
    <div data-md-component="skip">

      <a href="#schema" class="md-skip">
        Skip to content
      </a>

    </div>
    <div data-md-component="announce">

    </div>

    <header class="md-header md-header--shadow" data-md-component="header">
      <nav class="md-header__inner md-grid" aria-label="Header">
        <a href="../index.html" title="FlatBuffers Docs （文档）"
          class="md-header__button md-logo" aria-label="FlatBuffers Docs （文档）"
          data-md-component="logo">

          <img src="../assets/flatbuffers_logo.svg" alt="logo">

        </a>
        <label class="md-header__button md-icon" for="__drawer">

          <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path
              d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z" /></svg>
        </label>
        <div class="md-header__title" data-md-component="header-title">
          <div class="md-header__ellipsis">
            <div class="md-header__topic">
              <span class="md-ellipsis">
                FlatBuffers Docs （文档）
              </span>
            </div>
            <div class="md-header__topic" data-md-component="header-topic">
              <span class="md-ellipsis">

                Overview（概述）

              </span>
            </div>
          </div>
        </div>

        <form class="md-header__option" data-md-component="palette">

          <input class="md-option" data-md-color-media
            data-md-color-scheme="default" data-md-color-primary="indigo"
            data-md-color-accent="indigo" aria-label="切换到暗色模式"
            type="radio" name="__palette" id="__palette_0">

          <label class="md-header__button md-icon" title="切换到暗色模式"
            for="__palette_1" hidden>
            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path
                d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z" /></svg>
          </label>

          <input class="md-option" data-md-color-media
            data-md-color-scheme="slate" data-md-color-primary="indigo"
            data-md-color-accent="indigo" aria-label="切换到亮色模式"
            type="radio" name="__palette" id="__palette_1">

          <label class="md-header__button md-icon" title="切换到亮色模式"
            for="__palette_0" hidden>
            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path
                d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z" /></svg>
          </label>

        </form>

        <script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>

        <div class="md-header__source">
          <a href="https://github.com/google/flatbuffers"
            title="前往代码仓库" class="md-source"
            data-md-component="source">
            <div class="md-source__icon md-icon">

              <svg xmlns="http://www.w3.org/2000/svg"
                viewBox="0 0 496 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path
                  d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2" /></svg>
            </div>
            <div class="md-source__repository">
              google/FlatBuffers
            </div>
          </a>
        </div>

      </nav>

    </header>

    <div class="md-container" data-md-component="container">

      <main class="md-main" data-md-component="main">
        <div class="md-main__inner md-grid">

          <div class="md-sidebar md-sidebar--primary"
            data-md-component="sidebar" data-md-type="navigation">
            <div class="md-sidebar__scrollwrap">
              <div class="md-sidebar__inner">

                <nav class="md-nav md-nav--primary" aria-label="导航"
                  data-md-level="0">
                  <label class="md-nav__title" for="__drawer">
                    <a href="../index.html" title="FlatBuffers Docs （文档）"
                      class="md-nav__button md-logo"
                      aria-label="FlatBuffers Docs （文档）"
                      data-md-component="logo">

                      <img src="../assets/flatbuffers_logo.svg" alt="logo">

                    </a>
                    FlatBuffers Docs （文档）
                  </label>

                  <div class="md-nav__source">
                    <a href="https://github.com/google/flatbuffers"
                      title="前往代码仓库" class="md-source"
                      data-md-component="source">
                      <div class="md-source__icon md-icon">

                        <svg xmlns="http://www.w3.org/2000/svg"
                          viewBox="0 0 496 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path
                            d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2" /></svg>
                      </div>
                      <div class="md-source__repository">
                        google/FlatBuffers
                      </div>
                    </a>
                  </div>

                  <ul class="md-nav__list" data-md-scrollfix>

                    <li class="md-nav__item">
                      <a href="../index.html" class="md-nav__link">

                        <span class="md-ellipsis">
                          Overview（概述）

                        </span>

                      </a>
                    </li>

                    <li class="md-nav__item">
                      <a href="../quick_start/index.html" class="md-nav__link">

                        <span class="md-ellipsis">
                          Quick Start（快速入门）

                        </span>

                      </a>
                    </li>

                    <li class="md-nav__item">
                      <a href="../tutorial/index.html" class="md-nav__link">

                        <span class="md-ellipsis">
                          Tutorial（教程）

                        </span>

                      </a>
                    </li>

                    <li class="md-nav__item md-nav__item--nested">

                      <input
                        class="md-nav__toggle md-toggle md-toggle--indeterminate"
                        type="checkbox" id="__nav_4">

                      <label class="md-nav__link" for="__nav_4"
                        id="__nav_4_label" tabindex="0">

                        <span class="md-ellipsis">
                          Compiler (flatc)（编译器）

                        </span>

                        <span class="md-nav__icon md-icon"></span>
                      </label>

                      <nav class="md-nav" data-md-level="1"
                        aria-labelledby="__nav_4_label" aria-expanded="false">
                        <label class="md-nav__title" for="__nav_4">
                          <span class="md-nav__icon md-icon"></span>
                          Compiler (flatc)
                        </label>
                        <ul class="md-nav__list" data-md-scrollfix>

                          <li class="md-nav__item">
                            <a href="../building/index.html"
                              class="md-nav__link">

                              <span class="md-ellipsis">
                                Building（构建）

                              </span>

                            </a>
                          </li>

                          <li class="md-nav__item">
                            <a href="../flatc/index.html" class="md-nav__link">

                              <span class="md-ellipsis">
                                Using（使用）

                              </span>

                            </a>
                          </li>

                        </ul>
                      </nav>

                    </li>

                    <li
                      class="md-nav__item md-nav__item--active md-nav__item--nested">

                      <input class="md-nav__toggle md-toggle " type="checkbox"
                        id="__nav_5" checked>

                      <label class="md-nav__link" for="__nav_5"
                        id="__nav_5_label" tabindex="0">

                        <span class="md-ellipsis">
                          Schema (.fbs)（模式定义）

                        </span>

                        <span class="md-nav__icon md-icon"></span>
                      </label>

                      <nav class="md-nav" data-md-level="1"
                        aria-labelledby="__nav_5_label" aria-expanded="true">
                        <label class="md-nav__title" for="__nav_5">
                          <span class="md-nav__icon md-icon"></span>
                          Schema (.fbs)
                        </label>
                        <ul class="md-nav__list" data-md-scrollfix>

                          <li class="md-nav__item md-nav__item--active">

                            <input class="md-nav__toggle md-toggle"
                              type="checkbox" id="__toc">

                            <label class="md-nav__link md-nav__link--active"
                              for="__toc">

                              <span class="md-ellipsis">
                                Overview（概述）

                              </span>

                              <span class="md-nav__icon md-icon"></span>
                            </label>

                            <a href="index.html"
                              class="md-nav__link md-nav__link--active">

                              <span class="md-ellipsis">
                                Overview（概述）

                              </span>

                            </a>

                            <nav class="md-nav md-nav--secondary"
                              aria-label="目录">

                              <label class="md-nav__title" for="__toc">
                                <span class="md-nav__icon md-icon"></span>
                                目录
                              </label>
                              <ul class="md-nav__list" data-md-component="toc"
                                data-md-scrollfix>

                                <li class="md-nav__item">
                                  <a href="#tables" class="md-nav__link">
                                    <span class="md-ellipsis">
                                      Tables（表）
                                    </span>
                                  </a>

                                  <nav class="md-nav" aria-label="Tables">
                                    <ul class="md-nav__list">

                                      <li class="md-nav__item">
                                        <a href="#fields" class="md-nav__link">
                                          <span class="md-ellipsis">
                                            Fields（字段）
                                          </span>
                                        </a>

                                        <nav class="md-nav" aria-label="Fields">
                                          <ul class="md-nav__list">

                                            <li class="md-nav__item">
                                              <a href="#1-default"
                                                class="md-nav__link">
                                                <span class="md-ellipsis">
                                                  1. Default（默认值）
                                                </span>
                                              </a>

                                            </li>

                                            <li class="md-nav__item">
                                              <a href="#2-optional"
                                                class="md-nav__link">
                                                <span class="md-ellipsis">
                                                  2. Optional（可选值）
                                                </span>
                                              </a>

                                            </li>

                                            <li class="md-nav__item">
                                              <a href="#3-required"
                                                class="md-nav__link">
                                                <span class="md-ellipsis">
                                                  3. Required（必需值）
                                                </span>
                                              </a>

                                            </li>

                                          </ul>
                                        </nav>

                                      </li>

                                    </ul>
                                  </nav>

                                </li>

                                <li class="md-nav__item">
                                  <a href="#structs" class="md-nav__link">
                                    <span class="md-ellipsis">
                                      Structs（结构体）
                                    </span>
                                  </a>

                                  <nav class="md-nav" aria-label="Structs">
                                    <ul class="md-nav__list">

                                      <li class="md-nav__item">
                                        <a href="#arrays" class="md-nav__link">
                                          <span class="md-ellipsis">
                                            Arrays（数组）
                                          </span>
                                        </a>

                                      </li>

                                    </ul>
                                  </nav>

                                </li>

                                <li class="md-nav__item">
                                  <a href="#types" class="md-nav__link">
                                    <span class="md-ellipsis">
                                      Types（类型）
                                    </span>
                                  </a>

                                  <nav class="md-nav" aria-label="Types">
                                    <ul class="md-nav__list">

                                      <li class="md-nav__item">
                                        <a href="#scalars" class="md-nav__link">
                                          <span class="md-ellipsis">
                                            Scalars（标量）
                                          </span>
                                        </a>

                                      </li>

                                      <li class="md-nav__item">
                                        <a href="#non-scalars"
                                          class="md-nav__link">
                                          <span class="md-ellipsis">
                                            Non-scalars（非标量）
                                          </span>
                                        </a>

                                        <nav class="md-nav"
                                          aria-label="Non-scalars">
                                          <ul class="md-nav__list">

                                            <li class="md-nav__item">
                                              <a href="#vectors"
                                                class="md-nav__link">
                                                <span class="md-ellipsis">
                                                  Vectors（向量）
                                                </span>
                                              </a>

                                            </li>

                                            <li class="md-nav__item">
                                              <a href="#strings"
                                                class="md-nav__link">
                                                <span class="md-ellipsis">
                                                  Strings（字符串）
                                                </span>
                                              </a>

                                            </li>

                                          </ul>
                                        </nav>

                                      </li>

                                    </ul>
                                  </nav>

                                </li>

                                <li class="md-nav__item">
                                  <a href="#enums" class="md-nav__link">
                                    <span class="md-ellipsis">
                                      Enums（枚举）
                                    </span>
                                  </a>

                                </li>

                                <li class="md-nav__item">
                                  <a href="#unions" class="md-nav__link">
                                    <span class="md-ellipsis">
                                      Unions（联合体）
                                    </span>
                                  </a>

                                </li>

                                <li class="md-nav__item">
                                  <a href="#namespaces" class="md-nav__link">
                                    <span class="md-ellipsis">
                                      Namespaces（命名空间）
                                    </span>
                                  </a>

                                </li>

                                <li class="md-nav__item">
                                  <a href="#includes" class="md-nav__link">
                                    <span class="md-ellipsis">
                                      Includes（包含）
                                    </span>
                                  </a>

                                </li>

                                <li class="md-nav__item">
                                  <a href="#root-type" class="md-nav__link">
                                    <span class="md-ellipsis">
                                      Root type（根类型）
                                    </span>
                                  </a>

                                </li>

                                <li class="md-nav__item">
                                  <a href="#file-identification-and-extension"
                                    class="md-nav__link">
                                    <span class="md-ellipsis">
                                      File identification and
                                      extension（文件识别和扩展名）
                                    </span>
                                  </a>

                                </li>

                                <li class="md-nav__item">
                                  <a href="#rpc-interface-declarations"
                                    class="md-nav__link">
                                    <span class="md-ellipsis">
                                      RPC interface declarations（RPC接口声明）
                                    </span>
                                  </a>

                                </li>

                                <li class="md-nav__item">
                                  <a href="#comments-documentation"
                                    class="md-nav__link">
                                    <span class="md-ellipsis">
                                      Comments &amp; documentation（注释和文档）
                                    </span>
                                  </a>

                                </li>

                                <li class="md-nav__item">
                                  <a href="#attributes" class="md-nav__link">
                                    <span class="md-ellipsis">
                                      Attributes（属性）
                                    </span>
                                  </a>

                                  <nav class="md-nav" aria-label="Attributes">
                                    <ul class="md-nav__list">

                                      <li class="md-nav__item">
                                        <a href="#required"
                                          class="md-nav__link">
                                          <span class="md-ellipsis">
                                            required
                                          </span>
                                        </a>

                                      </li>

                                    </ul>
                                  </nav>

                                </li>

                                <li class="md-nav__item">
                                  <a href="#json-parsing" class="md-nav__link">
                                    <span class="md-ellipsis">
                                      JSON Parsing（JSON解析）
                                    </span>
                                  </a>

                                </li>

                                <li class="md-nav__item">
                                  <a href="#guidelines" class="md-nav__link">
                                    <span class="md-ellipsis">
                                      Guidelines（指南）
                                    </span>
                                  </a>

                                  <nav class="md-nav" aria-label="Guidelines">
                                    <ul class="md-nav__list">

                                      <li class="md-nav__item">
                                        <a href="#efficiency"
                                          class="md-nav__link">
                                          <span class="md-ellipsis">
                                            Efficiency（效率）
                                          </span>
                                        </a>

                                      </li>

                                      <li class="md-nav__item">
                                        <a href="#style-guide"
                                          class="md-nav__link">
                                          <span class="md-ellipsis">
                                            Style guide（样式指南）
                                          </span>
                                        </a>

                                      </li>

                                    </ul>
                                  </nav>

                                </li>

                                <li class="md-nav__item">
                                  <a href="#gotchas" class="md-nav__link">
                                    <span class="md-ellipsis">
                                      Gotchas（注意事项）
                                    </span>
                                  </a>

                                  <nav class="md-nav" aria-label="Gotchas">
                                    <ul class="md-nav__list">

                                      <li class="md-nav__item">
                                        <a
                                          href="#testing-whether-a-field-is-present-in-a-table"
                                          class="md-nav__link">
                                          <span class="md-ellipsis">
                                            Testing whether a field is present
                                            in a table（测试表中是否存在字段）
                                          </span>
                                        </a>

                                      </li>

                                    </ul>
                                  </nav>

                                </li>

                              </ul>

                            </nav>

                          </li>

                          <li class="md-nav__item">
                            <a href="../evolution/index.html"
                              class="md-nav__link">

                              <span class="md-ellipsis">
                                Evolution（演变）

                              </span>

                            </a>
                          </li>

                          <li class="md-nav__item">
                            <a href="../grammar/index.html"
                              class="md-nav__link">

                              <span class="md-ellipsis">
                                Grammar（语法）

                              </span>

                            </a>
                          </li>

                        </ul>
                      </nav>

                    </li>

                    <li class="md-nav__item md-nav__item--nested">

                      <input
                        class="md-nav__toggle md-toggle md-toggle--indeterminate"
                        type="checkbox" id="__nav_6">

                      <label class="md-nav__link" for="__nav_6"
                        id="__nav_6_label" tabindex="0">

                        <span class="md-ellipsis">
                          Language Guides（语言指南）

                        </span>

                        <span class="md-nav__icon md-icon"></span>
                      </label>

                      <nav class="md-nav" data-md-level="1"
                        aria-labelledby="__nav_6_label" aria-expanded="false">
                        <label class="md-nav__title" for="__nav_6">
                          <span class="md-nav__icon md-icon"></span>
                          Language Guides
                        </label>
                        <ul class="md-nav__list" data-md-scrollfix>

                          <li class="md-nav__item">
                            <a href="../languages/c/index.html"
                              class="md-nav__link">

                              <span class="md-ellipsis">
                                C

                              </span>

                            </a>
                          </li>

                          <li class="md-nav__item">
                            <a href="../languages/cpp/index.html"
                              class="md-nav__link">

                              <span class="md-ellipsis">
                                C++

                              </span>

                            </a>
                          </li>

                          <li class="md-nav__item">
                            <a href="../languages/c_sharp/index.html"
                              class="md-nav__link">

                              <span class="md-ellipsis">
                                C#

                              </span>

                            </a>
                          </li>

                          <li class="md-nav__item">
                            <a href="../languages/dart/index.html"
                              class="md-nav__link">

                              <span class="md-ellipsis">
                                Dart

                              </span>

                            </a>
                          </li>

                          <li class="md-nav__item">
                            <a href="../languages/go/index.html"
                              class="md-nav__link">

                              <span class="md-ellipsis">
                                Go

                              </span>

                            </a>
                          </li>

                          <li class="md-nav__item">
                            <a href="../languages/java/index.html"
                              class="md-nav__link">

                              <span class="md-ellipsis">
                                Java

                              </span>

                            </a>
                          </li>

                          <li class="md-nav__item">
                            <a href="../languages/javascript/index.html"
                              class="md-nav__link">

                              <span class="md-ellipsis">
                                JavasScript

                              </span>

                            </a>
                          </li>

                          <li class="md-nav__item">
                            <a href="../languages/kotlin/index.html"
                              class="md-nav__link">

                              <span class="md-ellipsis">
                                Kotlin

                              </span>

                            </a>
                          </li>

                          <li class="md-nav__item">
                            <a href="../languages/lobster/index.html"
                              class="md-nav__link">

                              <span class="md-ellipsis">
                                Lobster

                              </span>

                            </a>
                          </li>

                          <li class="md-nav__item">
                            <a href="../languages/lua/index.html"
                              class="md-nav__link">

                              <span class="md-ellipsis">
                                Lua

                              </span>

                            </a>
                          </li>

                          <li class="md-nav__item">
                            <a href="../languages/php/index.html"
                              class="md-nav__link">

                              <span class="md-ellipsis">
                                PHP

                              </span>

                            </a>
                          </li>

                          <li class="md-nav__item">
                            <a href="../languages/python/index.html"
                              class="md-nav__link">

                              <span class="md-ellipsis">
                                Python

                              </span>

                            </a>
                          </li>

                          <li class="md-nav__item">
                            <a href="../languages/rust/index.html"
                              class="md-nav__link">

                              <span class="md-ellipsis">
                                Rust

                              </span>

                            </a>
                          </li>

                          <li class="md-nav__item">
                            <a href="../languages/swift/index.html"
                              class="md-nav__link">

                              <span class="md-ellipsis">
                                Swift

                              </span>

                            </a>
                          </li>

                          <li class="md-nav__item">
                            <a href="../languages/typescript/index.html"
                              class="md-nav__link">

                              <span class="md-ellipsis">
                                TypeScript

                              </span>

                            </a>
                          </li>

                        </ul>
                      </nav>

                    </li>

                    <li class="md-nav__item">
                      <a href="../support/index.html" class="md-nav__link">

                        <span class="md-ellipsis">
                          Supported Configurations（支持的配置）

                        </span>

                      </a>
                    </li>

                    <li class="md-nav__item">
                      <a href="../white_paper/index.html" class="md-nav__link">

                        <span class="md-ellipsis">
                          White Paper（白皮书）

                        </span>

                      </a>
                    </li>

                    <li class="md-nav__item md-nav__item--nested">

                      <input
                        class="md-nav__toggle md-toggle md-toggle--indeterminate"
                        type="checkbox" id="__nav_9">

                      <label class="md-nav__link" for="__nav_9"
                        id="__nav_9_label" tabindex="0">

                        <span class="md-ellipsis">
                          Advanced（高级）

                        </span>

                        <span class="md-nav__icon md-icon"></span>
                      </label>

                      <nav class="md-nav" data-md-level="1"
                        aria-labelledby="__nav_9_label" aria-expanded="false">
                        <label class="md-nav__title" for="__nav_9">
                          <span class="md-nav__icon md-icon"></span>
                          Advanced
                        </label>
                        <ul class="md-nav__list" data-md-scrollfix>

                          <li class="md-nav__item">
                            <a href="../internals/index.html"
                              class="md-nav__link">

                              <span class="md-ellipsis">
                                FlatBuffers Internals（内部结构）

                              </span>

                            </a>
                          </li>

                          <li class="md-nav__item">
                            <a href="../intermediate_representation/index.html"
                              class="md-nav__link">

                              <span class="md-ellipsis">
                                Intermediate Representation（中间表示）

                              </span>

                            </a>
                          </li>

                          <li class="md-nav__item">
                            <a href="../annotation/index.html"
                              class="md-nav__link">

                              <span class="md-ellipsis">
                                Annotating Buffers (.afb)

                              </span>

                            </a>
                          </li>

                          <li class="md-nav__item">
                            <a href="../benchmarks/index.html"
                              class="md-nav__link">

                              <span class="md-ellipsis">
                                Benchmarks（基准测试）

                              </span>

                            </a>
                          </li>

                        </ul>
                      </nav>

                    </li>

                    <li class="md-nav__item">
                      <a href="../flexbuffers/index.html" class="md-nav__link">

                        <span class="md-ellipsis">
                          FlexBuffers (Schema-less version)（无模式版本）

                        </span>

                      </a>
                    </li>

                    <li class="md-nav__item">
                      <a href="../contributing/index.html" class="md-nav__link">

                        <span class="md-ellipsis">
                          Contributing（贡献）

                        </span>

                      </a>
                    </li>

                  </ul>
                </nav>
              </div>
            </div>
          </div>

          <div class="md-sidebar md-sidebar--secondary"
            data-md-component="sidebar" data-md-type="toc">
            <div class="md-sidebar__scrollwrap">
              <div class="md-sidebar__inner">

                <nav class="md-nav md-nav--secondary"
                  aria-label="目录">

                  <label class="md-nav__title" for="__toc">
                    <span class="md-nav__icon md-icon"></span>
                    目录
                  </label>
                  <ul class="md-nav__list" data-md-component="toc"
                    data-md-scrollfix>

                    <li class="md-nav__item">
                      <a href="#tables" class="md-nav__link">
                        <span class="md-ellipsis">
                          Tables（表）
                        </span>
                      </a>

                      <nav class="md-nav" aria-label="Tables">
                        <ul class="md-nav__list">

                          <li class="md-nav__item">
                            <a href="#fields" class="md-nav__link">
                              <span class="md-ellipsis">
                                Fields（字段）
                              </span>
                            </a>

                            <nav class="md-nav" aria-label="Fields">
                              <ul class="md-nav__list">

                                <li class="md-nav__item">
                                  <a href="#1-default" class="md-nav__link">
                                    <span class="md-ellipsis">
                                      1. Default（默认值）
                                    </span>
                                  </a>

                                </li>

                                <li class="md-nav__item">
                                  <a href="#2-optional" class="md-nav__link">
                                    <span class="md-ellipsis">
                                      2. Optional（可选值）
                                    </span>
                                  </a>

                                </li>

                                <li class="md-nav__item">
                                  <a href="#3-required" class="md-nav__link">
                                    <span class="md-ellipsis">
                                      3. Required（必需值）
                                    </span>
                                  </a>

                                </li>

                              </ul>
                            </nav>

                          </li>

                        </ul>
                      </nav>

                    </li>

                    <li class="md-nav__item">
                      <a href="#structs" class="md-nav__link">
                        <span class="md-ellipsis">
                          Structs（结构体）
                        </span>
                      </a>

                      <nav class="md-nav" aria-label="Structs">
                        <ul class="md-nav__list">

                          <li class="md-nav__item">
                            <a href="#arrays" class="md-nav__link">
                              <span class="md-ellipsis">
                                Arrays（数组）
                              </span>
                            </a>

                          </li>

                        </ul>
                      </nav>

                    </li>

                    <li class="md-nav__item">
                      <a href="#types" class="md-nav__link">
                        <span class="md-ellipsis">
                          Types（类型）
                        </span>
                      </a>

                      <nav class="md-nav" aria-label="Types">
                        <ul class="md-nav__list">

                          <li class="md-nav__item">
                            <a href="#scalars" class="md-nav__link">
                              <span class="md-ellipsis">
                                Scalars（标量）
                              </span>
                            </a>

                          </li>

                          <li class="md-nav__item">
                            <a href="#non-scalars" class="md-nav__link">
                              <span class="md-ellipsis">
                                Non-scalars（非标量）
                              </span>
                            </a>

                            <nav class="md-nav" aria-label="Non-scalars">
                              <ul class="md-nav__list">

                                <li class="md-nav__item">
                                  <a href="#vectors" class="md-nav__link">
                                    <span class="md-ellipsis">
                                      Vectors（向量）
                                    </span>
                                  </a>

                                </li>

                                <li class="md-nav__item">
                                  <a href="#strings" class="md-nav__link">
                                    <span class="md-ellipsis">
                                      Strings（字符串）
                                    </span>
                                  </a>

                                </li>

                              </ul>
                            </nav>

                          </li>

                        </ul>
                      </nav>

                    </li>

                    <li class="md-nav__item">
                      <a href="#enums" class="md-nav__link">
                        <span class="md-ellipsis">
                          Enums（枚举）
                        </span>
                      </a>

                    </li>

                    <li class="md-nav__item">
                      <a href="#unions" class="md-nav__link">
                        <span class="md-ellipsis">
                          Unions（联合体）
                        </span>
                      </a>

                    </li>

                    <li class="md-nav__item">
                      <a href="#namespaces" class="md-nav__link">
                        <span class="md-ellipsis">
                          Namespaces（命名空间）
                        </span>
                      </a>

                    </li>

                    <li class="md-nav__item">
                      <a href="#includes" class="md-nav__link">
                        <span class="md-ellipsis">
                          Includes（包含）
                        </span>
                      </a>

                    </li>

                    <li class="md-nav__item">
                      <a href="#root-type" class="md-nav__link">
                        <span class="md-ellipsis">
                          Root type
                        </span>
                      </a>

                    </li>

                    <li class="md-nav__item">
                      <a href="#file-identification-and-extension"
                        class="md-nav__link">
                        <span class="md-ellipsis">
                          File identification and extension
                        </span>
                      </a>

                    </li>

                    <li class="md-nav__item">
                      <a href="#rpc-interface-declarations"
                        class="md-nav__link">
                        <span class="md-ellipsis">
                          RPC interface declarations
                        </span>
                      </a>

                    </li>

                    <li class="md-nav__item">
                      <a href="#comments-documentation" class="md-nav__link">
                        <span class="md-ellipsis">
                          Comments &amp; documentation
                        </span>
                      </a>

                    </li>

                    <li class="md-nav__item">
                      <a href="#attributes" class="md-nav__link">
                        <span class="md-ellipsis">
                          Attributes
                        </span>
                      </a>

                      <nav class="md-nav" aria-label="Attributes">
                        <ul class="md-nav__list">

                          <li class="md-nav__item">
                            <a href="#required" class="md-nav__link">
                              <span class="md-ellipsis">
                                required
                              </span>
                            </a>

                          </li>

                        </ul>
                      </nav>

                    </li>

                    <li class="md-nav__item">
                      <a href="#json-parsing" class="md-nav__link">
                        <span class="md-ellipsis">
                          JSON Parsing
                        </span>
                      </a>

                    </li>

                    <li class="md-nav__item">
                      <a href="#guidelines" class="md-nav__link">
                        <span class="md-ellipsis">
                          Guidelines
                        </span>
                      </a>

                      <nav class="md-nav" aria-label="Guidelines">
                        <ul class="md-nav__list">

                          <li class="md-nav__item">
                            <a href="#efficiency" class="md-nav__link">
                              <span class="md-ellipsis">
                                Efficiency
                              </span>
                            </a>

                          </li>

                          <li class="md-nav__item">
                            <a href="#style-guide" class="md-nav__link">
                              <span class="md-ellipsis">
                                Style guide
                              </span>
                            </a>

                          </li>

                        </ul>
                      </nav>

                    </li>

                    <li class="md-nav__item">
                      <a href="#gotchas" class="md-nav__link">
                        <span class="md-ellipsis">
                          Gotchas
                        </span>
                      </a>

                      <nav class="md-nav" aria-label="Gotchas">
                        <ul class="md-nav__list">

                          <li class="md-nav__item">
                            <a
                              href="#testing-whether-a-field-is-present-in-a-table"
                              class="md-nav__link">
                              <span class="md-ellipsis">
                                Testing whether a field is present in a table
                              </span>
                            </a>

                          </li>

                        </ul>
                      </nav>

                    </li>

                  </ul>

                </nav>
              </div>
            </div>
          </div>

          <div class="md-content" data-md-component="content">
            <article class="md-content__inner md-typeset">

              <a
                href="https://github.com/google/flatbuffers/edit/master/docs/source/schema.md"
                title="Edit this page" class="md-content__button md-icon">

                <svg xmlns="http://www.w3.org/2000/svg"
                  viewBox="0 0 24 24"><path
                    d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4zm10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1z" /></svg>
              </a>

              <h1 id="schema">Schema（模式）</h1>
              <p>模式语言（也称为IDL，
                <a
                  href="https://en.wikipedia.org/wiki/Interface_description_language">Interface
                  Definition Language（接口定义语言）</a>）
                的语法对于使用任何C语言家族的用户应该看起来很熟悉，
                对于使用其他IDL的用户也是如此。让我们先看一个例子：</p>
              <div class="highlight"><table class="highlighttable"><tr><th
                      colspan="2" class="filename"><span
                        class="filename">monster.fbs</span></th></tr><tr><td
                      class="linenos"><div
                        class="linenodiv"><pre><span></span><span class="normal"> 1</span>
<span class="normal"> 2</span>
<span class="normal"> 3</span>
<span class="normal"> 4</span>
<span class="normal"> 5</span>
<span class="normal"> 6</span>
<span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal">10</span>
<span class="normal">11</span>
<span class="normal">12</span>
<span class="normal">13</span>
<span class="normal">14</span>
<span class="normal">15</span>
<span class="normal">16</span>
<span class="normal">17</span>
<span class="normal">18</span>
<span class="normal">19</span>
<span class="normal">20</span>
<span class="normal">21</span>
<span class="normal">22</span>
<span class="normal">23</span>
<span class="normal">24</span>
<span class="normal">25</span>
<span class="normal">26</span>
<span class="normal">27</span>
<span class="normal">28</span>
<span class="normal">29</span>
<span class="normal">30</span>
<span class="normal">31</span></pre></div></td><td
                      class="code"><div><pre><span></span><code><span class="c1">// 示例IDL文件</span>

<span class="n">namespace</span><span class="w"> </span><span class="n">MyGame</span><span class="p">;</span>

<span class="n">attribute</span><span class="w"> </span><span class="s">&quot;priority&quot;</span><span class="p">;</span>

<span class="k">enum</span><span class="w"> </span><span class="n">Color</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">byte</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">Red</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="n">Green</span><span class="p">,</span><span class="w"> </span><span class="n">Blue</span><span class="w"> </span><span class="p">}</span>

<span class="k">union</span><span class="w"> </span><span class="nc">Any</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">Monster</span><span class="p">,</span><span class="w"> </span><span class="n">Weapon</span><span class="p">,</span><span class="w"> </span><span class="n">Pickup</span><span class="w"> </span><span class="p">}</span>

<span class="k">struct</span><span class="w"> </span><span class="nc">Vec3</span><span class="w"> </span><span class="p">{</span>
<span class="w">  </span><span class="nl">x</span><span class="p">:</span><span class="kt">float</span><span class="p">;</span>
<span class="w">  </span><span class="nl">y</span><span class="p">:</span><span class="kt">float</span><span class="p">;</span>
<span class="w">  </span><span class="nl">z</span><span class="p">:</span><span class="kt">float</span><span class="p">;</span>
<span class="p">}</span>

<span class="n">table</span><span class="w"> </span><span class="n">Monster</span><span class="w"> </span><span class="p">{</span>
<span class="w">  </span><span class="nl">pos</span><span class="p">:</span><span class="n">Vec3</span><span class="p">;</span>
<span class="w">  </span><span class="nl">mana</span><span class="p">:</span><span class="kt">short</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">150</span><span class="p">;</span>
<span class="w">  </span><span class="nl">hp</span><span class="p">:</span><span class="kt">short</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">100</span><span class="p">;</span>
<span class="w">  </span><span class="nl">name</span><span class="p">:</span><span class="n">string</span><span class="p">;</span>
<span class="w">  </span><span class="nl">friendly</span><span class="p">:</span><span class="kt">bool</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">false</span><span class="w"> </span><span class="p">(</span><span class="n">deprecated</span><span class="p">,</span><span class="w"> </span><span class="n">priority</span><span class="o">:</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span>
<span class="w">  </span><span class="nl">inventory</span><span class="p">:[</span><span class="n">ubyte</span><span class="p">];</span>
<span class="w">  </span><span class="nl">color</span><span class="p">:</span><span class="n">Color</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Blue</span><span class="p">;</span>
<span class="w">  </span><span class="nl">test</span><span class="p">:</span><span class="n">Any</span><span class="p">;</span>
<span class="p">}</span>

<span class="n">table</span><span class="w"> </span><span class="n">Weapon</span><span class="w"> </span><span class="p">{}</span>
<span class="n">table</span><span class="w"> </span><span class="n">Pickup</span><span class="w"> </span><span class="p">{}</span>

<span class="n">root_type</span><span class="w"> </span><span class="n">Monster</span><span class="p">;</span>
</code></pre></div></td></tr></table></div>
              <h2 id="tables">Tables（表）</h2>
              <p>表是在FlatBuffers中定义对象的主要方式。</p>
              <div class="highlight"><table class="highlighttable"><tr><th
                      colspan="2" class="filename"><span
                        class="filename">monster.fbs -
                        示例表</span></th></tr><tr><td class="linenos"><div
                        class="linenodiv"><pre><span></span><span class="normal">17</span>
<span class="normal">18</span>
<span class="normal">19</span>
<span class="normal">20</span>
<span class="normal">21</span>
<span class="normal">22</span>
<span class="normal">23</span>
<span class="normal">24</span>
<span class="normal">25</span>
<span class="normal">26</span></pre></div></td><td
                      class="code"><div><pre><span></span><code><span class="n">table</span><span class="w"> </span><span class="n">Monster</span><span class="w"> </span><span class="p">{</span>
<span class="w">  </span><span class="nl">pos</span><span class="p">:</span><span class="n">Vec3</span><span class="p">;</span>
<span class="w">  </span><span class="nl">mana</span><span class="p">:</span><span class="kt">short</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">150</span><span class="p">;</span>
<span class="w">  </span><span class="nl">hp</span><span class="p">:</span><span class="kt">short</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">100</span><span class="p">;</span>
<span class="w">  </span><span class="nl">name</span><span class="p">:</span><span class="n">string</span><span class="p">;</span>
<span class="w">  </span><span class="nl">friendly</span><span class="p">:</span><span class="kt">bool</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">false</span><span class="w"> </span><span class="p">(</span><span class="n">deprecated</span><span class="p">,</span><span class="w"> </span><span class="n">priority</span><span class="o">:</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span>
<span class="w">  </span><span class="nl">inventory</span><span class="p">:[</span><span class="n">ubyte</span><span class="p">];</span>
<span class="w">  </span><span class="nl">color</span><span class="p">:</span><span class="n">Color</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Blue</span><span class="p">;</span>
<span class="w">  </span><span class="nl">test</span><span class="p">:</span><span class="n">Any</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></td></tr></table></div>
              <p>它们由一个名称（这里是<code>Monster</code>）和一个<a
                  href="#fields">字段（fields）</a>列表组成。这个
                字段列表可以在保持兼容性的同时进行追加（和弃用）。</p>
              <h3 id="fields">Fields（字段）</h3>
              <p>表字段有一个名称标识符、一个<a href="#types">类型（type）</a>、可选的默认值、
                可选的<a
                  href="#attributes">属性（attributes）</a>，并以<code>;</code>结尾。有关完整
                详细信息，请参阅<a href="../grammar/index.html">语法（grammar）</a>。</p>
              <div
                class="highlight"><pre><span></span><code><span class="k">field_decl </span><span class="o">=</span> <span class="k">ident </span><span class="err">`:`</span> <span class="k">type </span><span class="p">[</span> <span class="err">`=`</span> <span class="k">scalar </span><span class="p">]</span> <span class="k">metadata </span><span class="err">`</span><span class="p">;</span><span class="err">`</span>
</code></pre></div>
              <p>字段不必出现在线路表示中，并且在构造对象时可以选择
                省略字段。这给了你添加字段的灵活性，而不必担心数据膨胀。这种设计也是
                FlatBuffer实现前向和后向兼容性的机制。</p>
              <p>对于二进制数据中不存在表字段的情况，有三种互斥的反应。</p>
              <h4 id="1-default">1. Default（默认值）</h4>
              <p>带有默认值的字段将返回模式中定义的默认值。如果
                在模式中未指定默认值，则对于标量类型为<code>0</code>，对于其他类型为<code>null</code>。</p>
              <div
                class="highlight"><pre><span></span><code><span class="nl">mana</span><span class="p">:</span><span class="kt">short</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">150</span><span class="p">;</span>
<span class="nl">hp</span><span class="p">:</span><span class="kt">short</span><span class="p">;</span>
<span class="nl">inventory</span><span class="p">:[</span><span class="n">ubyte</span><span class="p">];</span>
</code></pre></div>
              <p>如果这些字段未设置，则这里<code>mana</code>的默认值为<code>150</code>，<code>hp</code>的值为<code>0</code>，而<code>inventory</code>
                为<code>null</code>。</p>
              <p>只有标量值可以有显式默认值，非标量字段（字符串、
                向量、表）在不存在时为<code>null</code>。</p>
              <p>这是字段通常采用的正常模式。</p>
              <details class="danger">
                <summary>不要更改默认值</summary>
                <p>通常，你不应该在初始定义后更改默认值。具有默认值的字段实际上不会存储在
                  序列化数据中（另见下面的注意事项）。由旧版模式生成的代码明确写入的值，
                  如果恰好是默认值，将被使用新模式生成的代码读取为不同的值。
                  将可选标量转换为带默认值的标量时，这种情况略微好一些，
                  因为非存在不会与之前的默认值混淆。
                  但在某些情况下，这可能是可取的，特别是如果你能确保所有代码同时重建。</p>
              </details>
              <h4 id="2-optional">2. Optional（可选值）</h4>
              <p>可选值字段在生成的语言中将返回某种形式的<code>null</code>。</p>
              <div class="tabbed-set tabbed-alternate" data-tabs="1:1"><input
                  checked="checked" id="c" name="__tabbed_1" type="radio" /><div
                  class="tabbed-labels"><label for="c">C++</label></div>
                <div class="tabbed-content">
                  <div class="tabbed-block">
                    <div
                      class="highlight"><pre><span></span><code><span class="n">std</span><span class="o">::</span><span class="n">optional</span><span class="o">&lt;</span><span class="n">T</span><span class="o">&gt;</span><span class="w"> </span><span class="n">field</span><span class="p">;</span>
</code></pre></div>
                  </div>
                </div>
              </div>
              <p>对于可选标量，只需将字段默认值设置为<code>null</code>。如果
                缓冲区的生成者没有明确设置该字段，它将被标记为
                <code>null</code>。</p>
              <div
                class="highlight"><pre><span></span><code><span class="w">  </span><span class="nl">hp</span><span class="p">:</span><span class="kt">short</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">null</span><span class="p">;</span>
</code></pre></div>
              <div class="admonition note">
                <p class="admonition-title">注意</p>
                <p>并非所有语言都支持标量默认值</p>
              </div>
              <h4 id="3-required">3. Required（必需值）</h4>
              <p>必需值字段如果未设置将导致错误。FlatBuffers
                验证器会将整个缓冲区视为无效。</p>
              <p>这是通过字段上的<a href="#required"><code>required</code>属性</a>启用的。</p>
              <div
                class="highlight"><pre><span></span><code>  hp:short (required)
</code></pre></div>
              <p>你不能将<code>required</code>设置为带有显式默认值，这将导致
                编译器错误。</p>
              <h2 id="structs">Structs（结构体）</h2>
              <p>与表类似，<code>structs</code>由字段组成，这些字段是必需的（所以也没有默认值），
                并且不能添加或弃用字段。</p>
              <div class="highlight"><table class="highlighttable"><tr><th
                      colspan="2" class="filename"><span
                        class="filename">monster.fbs -
                        示例结构体</span></th></tr><tr><td class="linenos"><div
                        class="linenodiv"><pre><span></span><span class="normal">11</span>
<span class="normal">12</span>
<span class="normal">13</span>
<span class="normal">14</span>
<span class="normal">15</span></pre></div></td><td
                      class="code"><div><pre><span></span><code><span class="k">struct</span><span class="w"> </span><span class="nc">Vec3</span><span class="w"> </span><span class="p">{</span>
<span class="w">  </span><span class="nl">x</span><span class="p">:</span><span class="kt">float</span><span class="p">;</span>
<span class="w">  </span><span class="nl">y</span><span class="p">:</span><span class="kt">float</span><span class="p">;</span>
<span class="w">  </span><span class="nl">z</span><span class="p">:</span><span class="kt">float</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></td></tr></table></div>
              <p>结构体只能包含标量或其他结构体。对于你非常确定永远不会更改的简单对象（例如示例中的<code>Vec3</code>），请使用这种方式。结构体比表使用更少的内存，访问速度更快（它们总是内联存储在父对象中，不使用虚拟表）。</p>
              <h3 id="arrays">Arrays（数组）</h3>
              <p>数组是固定长度元素集合的便捷简写方式。
                数组允许以下语法，同时保持二进制等价性。</p>
              <div class="grid cards">
                <ul>
                  <li><strong>普通语法</strong></li>
                </ul>
                <p>===</p>
                <div
                  class="highlight"><pre><span></span><code><span class="k">struct</span><span class="w"> </span><span class="nc">Vec3</span><span class="w"> </span><span class="p">{</span>
<span class="w">  </span><span class="nl">x</span><span class="p">:</span><span class="kt">float</span><span class="p">;</span>
<span class="w">  </span><span class="nl">y</span><span class="p">:</span><span class="kt">float</span><span class="p">;</span>
<span class="w">  </span><span class="nl">z</span><span class="p">:</span><span class="kt">float</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div>
                <ul>
                  <li><strong>数组语法</strong></li>
                </ul>
                <p>===</p>
                <div
                  class="highlight"><pre><span></span><code><span class="k">struct</span><span class="w"> </span><span class="nc">Vec3</span><span class="w"> </span><span class="p">{</span>
<span class="w">  </span><span class="nl">v</span><span class="p">:[</span><span class="kt">float</span><span class="o">:</span><span class="mi">3</span><span class="p">];</span>
<span class="p">}</span>
</code></pre></div>
              </div>
              <p>数组目前仅支持在<code>struct</code>中使用。</p>
              <h2 id="types">Types（类型）</h2>
              <p>以下是FlatBuffers可以使用的内置类型。</p>
              <h3 id="scalars">Scalars（标量）</h3>
              <p>标准固定大小的标量集合可用。没有
                可变大小的整数（例如<code>varints</code>）。</p>
              <table>
                <thead>
                  <tr>
                    <th>Size</th>
                    <th>Signed</th>
                    <th>Unsigned</th>
                    <th>Floating Point</th>
                  </tr>
                </thead>
                <tbody>
                  <tr>
                    <td>8-bit</td>
                    <td><code>byte</code>, <code>bool</code></td>
                    <td><code>ubyte</code> (<code>uint8</code>)</td>
                    <td></td>
                  </tr>
                  <tr>
                    <td>16-bit</td>
                    <td><code>short</code> (<code>int16</code>)</td>
                    <td><code>ushort</code> (<code>uint16</code>)</td>
                    <td></td>
                  </tr>
                  <tr>
                    <td>32-bit</td>
                    <td><code>int</code> (<code>int32</code>)</td>
                    <td><code>uint</code> (<code>uint32</code>)</td>
                    <td><code>float</code> (<code>float32</code>)</td>
                  </tr>
                  <tr>
                    <td>64-bit</td>
                    <td><code>long</code> (<code>int64</code>)</td>
                    <td><code>ulong</code> (<code>uint64</code>)</td>
                    <td><code>double</code> (<code>float64</code>)</td>
                  </tr>
                </tbody>
              </table>
              <p>括号中的类型名称是别名，例如<code>uint8</code>可以
                代替<code>ubyte</code>，<code>int32</code>可以
                代替<code>int</code>，而不影响代码生成。</p>
              <h3 id="non-scalars">Non-scalars（非标量）</h3>
              <h4 id="vectors">Vectors（向量）</h4>
              <p>任何其他类型的向量（用<code>[type]</code>表示）。</p>
              <div
                class="highlight"><pre><span></span><code><span class="nl">inventory</span><span class="p">:[</span><span class="n">ubyte</span><span class="p">];</span>
</code></pre></div>
              <div class="admonition note">
                <p class="admonition-title">Nesting vectors</p>
                <p>不支持嵌套向量，相反，你可以用一个表将内部向量包裹起来。</p>
                <div class="highlight"><pre><span></span><code>table nest{
   a:[ubyte]
}

table monster {
 a:[nest]
}
</code></pre></div>
              </div>
              <h4 id="strings">Strings（字符串）</h4>
              <p>字符串（用<code>string</code>表示）是零终止字符串，长度在前。字符串只能包含UTF-8或7位ASCII。对于其他文本编码或
                一般二进制数据，请使用向量（<code>[byte]</code>或
                <code>[ubyte]</code>）。</p>
              <div
                class="highlight"><pre><span></span><code><span class="nl">name</span><span class="p">:</span><span class="n">string</span><span class="p">;</span>
</code></pre></div>
              <h2 id="enums">Enums（枚举）</h2>
              <p>定义一系列命名常量，每个常量都有一个给定的值，或者从上一个常量增加一个。默认第一个值是
                <code>0</code>。根据枚举声明，你可以指定枚举的底层积分类型（<code>:</code>
                在本例中为<code>byte</code>），这决定了任何使用此枚举类型的字段。</p>
              <p>只允许整数类型，即<code>byte</code>、<code>ubyte</code>、<code>short</code>
                <code>ushort</code>、
                <code>int</code>、<code>uint</code>、<code>long</code>和<code>ulong</code>。</p>
              <p>通常，枚举值应该只添加，从不删除（没有枚举的弃用）。这要求代码自己处理向前兼容性，
                通过处理未知枚举值。</p>
              <h2 id="unions">Unions（联合体）</h2>
              <p>联合体与枚举有很多共同点，但不是为常量提供新的名称，而是使用表的名称。然后你可以声明一个联合体字段，它可以包含任何这些类型的引用，并且还生成一个带有
                后缀<code>_type</code>的字段，持有相应的枚举值，允许你在运行时知道要转换为哪种类型。</p>
              <p>可以给类型联合体一个别名名称。这样，类型可以用来表示不同的东西，取决于使用的名称：</p>
              <div
                class="highlight"><pre><span></span><code>table PointPosition { x:uint; y:uint; }
table MarkerPosition {}
union Position {
  Start:MarkerPosition,
  Point:PointPosition,
  Finish:MarkerPosition
}
</code></pre></div>
              <p>联合体包含一个特殊的<code>NONE</code>标记，表示没有值存储，因此名称不能用作别名。</p>
              <p>联合体是发送多个消息类型的好方法，
                因为联合体字段实际上是两个字段，它必须总是位于表中，不能是FlatBuffer的根。</p>
              <p>如果你需要区分不同FlatBuffers的更多开放方式，例如用于文件，请参阅下面的文件识别功能。</p>
              <p>在C++中，实验性支持联合体（和类型）的向量。在示例IDL文件中，使用[Any]向Monster表添加Any类型的向量。还有实验性支持其他类型，例如结构体和字符串，在联合体中。没有直接支持标量，但它们可以在没有空间成本的情况下包装在结构体中。</p>
              <h2 id="namespaces">Namespaces（命名空间）</h2>
              <p>这些将生成相应的命名空间，用于所有辅助代码，以及Java中的包。你可以使用<code>.</code>来指定嵌套命名空间/包。</p>
              <h2 id="includes">Includes（包含）</h2>
              <p>你可以包含其他模式文件在你的当前文件中，例如：</p>
              <div
                class="highlight"><pre><span></span><code>include &quot;mydefinitions.fbs&quot;;
</code></pre></div>
              <p>这使得更容易引用定义在其他地方的类型。<code>include</code>
                自动确保每个文件只解析一次，即使多次引用也是如此。</p>
              <p>当使用<code>flatc</code>编译器为模式定义生成代码时，只有当前文件中的定义会被生成，而不是包含的文件（那些你仍然需要单独生成）。</p>
              <h2 id="root-type">Root type（根类型）</h2>
              <p>这声明了你认为序列化数据中的根表。
                这对于解析JSON数据特别重要，因为JSON数据不包括对象类型信息。</p>
              <h2 id="file-identification-and-extension">File identification and
                extension（文件识别和扩展名）</h2>
              <p>通常，FlatBuffer二进制缓冲区不是自描述的，即需要你知道它的模式才能正确解析它。但如果你希望使用FlatBuffer作为文件格式，则可以在其中添加一个"magic number"，就像大多数文件格式一样，以便能够进行健全性检查，看看你是否正在读取你期望的文件类型。</p>
              <p>现在，你可以始终在FlatBuffer前面添加自己的文件头，但FlatBuffers有一个内置的方法，可以在不占用太多空间的情况下，为FlatBuffer添加一个标识符，并保持缓冲区与不具有此类标识符的缓冲区兼容。</p>
              <p>你可以在模式中指定，类似于<code>root_type</code>，你希望这种FlatBuffer用于文件格式：</p>
              <div
                class="highlight"><pre><span></span><code>file_identifier &quot;MYFI&quot;;
</code></pre></div>
              <p>标识符必须总是4个字符长。这些4个字符将作为字节出现在缓冲区的偏移量4-7（包括）。</p>
              <p>对于任何具有此类标识符的模式，<code>flatc</code>将自动为任何二进制文件添加标识符（使用<code>-b</code>），并且生成的调用像<code>FinishMonsterBuffer</code>也会添加标识符。如果你已经指定了标识符，并且希望生成没有标识符的缓冲区，你可以始终通过调用<code>FlatBufferBuilder::Finish</code>来实现。</p>
              <p>加载缓冲区后，你可以使用像<code>MonsterBufferHasIdentifier</code>这样的调用来检查标识符是否存在。</p>
              <p>请注意，这对开放式用途（例如文件）最有用。如果你只是想发送一组可能的消息之一，例如，你最好使用联合体。</p>
              <p>此外，默认情况下，<code>flatc</code>会将二进制文件输出为<code>.bin</code>。你可以在模式中更改此设置：</p>
              <div
                class="highlight"><pre><span></span><code>file_extension &quot;ext&quot;;
</code></pre></div>
              <h2 id="rpc-interface-declarations">RPC interface
                declarations（RPC接口声明）</h2>
              <p>你可以在模式中声明RPC调用，这些调用定义了一组函数，这些函数接受FlatBuffer作为参数（请求）并返回FlatBuffer作为响应（两者都必须为表类型）：</p>
              <div
                class="highlight"><pre><span></span><code>rpc_service MonsterStorage {
    Store(Monster):StoreResponse;
    Retrieve(MonsterId):Monster;
}
</code></pre></div>
              <p>代码生成和使用方式取决于语言和RPC系统，初步支持通过<code>--grpc</code>代码生成器进行GRPC，请参阅<code>grpc/tests</code>中的示例。</p>
              <h2 id="comments-documentation">Comments &amp;
                documentation（注释和文档）</h2>
              <p>可以像大多数C语言一样编写注释。此外，单行注释（<code>///</code>）表示注释是任何声明之后的文档注释，
                并且注释输出在相应的C++代码中。允许多行注释。</p>
              <h2 id="attributes">Attributes（属性）</h2>
              <p>属性可以附加到声明上，在字段/枚举值之后，或者在表/结构体/枚举/联合体的名称之后。这些可能具有值或没有值。
                一些属性（如<code>deprecated</code>）被编译器理解；用户定义的属性需要用属性声明（如示例中的<code>priority</code>），并且可以在运行时查询。
                这对于你编写自己的代码生成器/编辑器等很有用，并且你希望添加与你的工具相关的额外信息（例如帮助文本）。</p>
              <p>当前理解的属性：</p>
              <ul>
                <li><code>id:
                    n</code>（在表字段上）：手动将字段标识符设置为<code>n</code>。如果你使用此属性，你必须在所有字段上使用此属性，并且数字必须从0开始连续。
                  此外，由于联合体类型实际上添加了两个字段，其id必须是第二个字段的id（第一个字段是类型字段，不在模式中明确声明）。例如，如果最后一个字段在联合字段之前有id
                  6，则联合字段应该有id
                  8，并且联合类型字段将隐式为7。id允许字段按任何顺序放置在模式中。当向模式添加新字段时，必须使用下一个可用id。</li>
                <li><code>deprecated</code>（在字段上）：不再为这个字段生成访问器，代码应该停止使用这个数据。旧数据可能仍然包含这个字段，但它不会被新代码访问。请注意，如果你弃用一个以前需要的字段，旧代码可能无法验证新数据（当使用可选验证器时）。</li>
              </ul>
              <h3 id="required"><code>required</code></h3>
              <ul>
                <li><code>required</code>（在非标量表字段上）：这个字段必须始终设置。默认情况下，字段不需要出现在二进制数据中。这很有用，因为它有助于前向/后向兼容性，并且数据结构的灵活性。通过指定此属性，你使非存在成为错误，无论是读者还是作者。读取代码可以直接访问字段，而不检查null。如果构造代码不初始化此字段，他们将得到一个断言，验证器也会在缺少必需字段的缓冲区上失败。添加和删除此属性可能是前向/后向不兼容的，因为读者将无法读取旧的或新的数据，除非数据恰好始终设置此字段。</li>
                <li><code>force_align:
                    size</code>（在结构体上）：强制此结构体的对齐方式高于自然对齐方式。这会使这些结构体在缓冲区中按该数量对齐，如果缓冲区是用该对齐方式分配的（这不一定适用于直接在<code>FlatBufferBuilder</code>中的缓冲区）。注意：目前不保证在<code>--object-api</code>使用时有效，因为这可能会在小于你指定的对齐方式下分配对象。</li>
                <li><code>force_align:
                    size</code>（在向量上）：强制此向量的对齐方式不同于元素大小通常指示的方式。注意：目前仅在生成的C++代码中有效。</li>
                <li><code>bit_flags</code>（在无符号枚举上）：此字段的值表示位，这意味着任何在模式中指定的N值都将表示为1&lt;&lt;N，或者如果你不指定值，你将得到序列1,
                  2, 4, 8, ...。</li>
                <li><code>nested_flatbuffer:
                    "table_name"</code>（在字段上）：这表示该字段（必须是ubyte的向量）包含flatbuffer数据，其根类型由<code>table_name</code>给出。生成的代码将生成一个方便的访问器，用于嵌套的FlatBuffer。</li>
                <li><code>flexbuffer</code>（在字段上）：这表示该字段（必须是ubyte的向量）包含flexbuffer数据。生成的代码将生成一个方便的访问器，用于FlexBuffer根。</li>
                <li><code>key</code>（在字段上）：此字段用于在排序类型表中作为键使用。可用于就地二进制搜索。</li>
                <li><code>hash</code>（在字段上）。这是一个（无符号）32/64位整数字段，其值在JSON解析期间允许为字符串，这将被存储为它的哈希值。属性值是使用的哈希算法，<code>fnv1_32</code>
                  <code>fnv1_64</code>
                  <code>fnv1a_32</code> <code>fnv1a_64</code>之一。</li>
                <li><code>original_order</code>（在表上）：由于表中的元素不需要按任何特定顺序存储，它们通常会为了空间优化而排序。此属性停止这种情况发生。通常不应该使用此标志。</li>
                <li>'native*'. 几种属性已被添加以支持C++对象
                  基于API。所有此类属性都以"native"一词开头。</li>
              </ul>
              <h2 id="json-parsing">JSON Parsing（JSON解析）</h2>
              <p>与上述解析模式声明相同的解析器也可以解析JSON对象，这些对象符合此模式。因此，与大多数JSON解析器不同，此解析器是强类型的，并且直接解析为FlatBuffer（请参阅命令行上的编译器文档，或运行时C++文档，了解如何从命令行执行此操作）。</p>
              <p>除了需要模式外，还有几个其他更改如何解析JSON：</p>
              <ul>
                <li>它接受带有和没有引号的字段名称，就像大多数JSON解析器已经做的那样。它也会输出它们，尽管可以通过<code>strict_json</code>标志使其输出。</li>
                <li>如果字段具有枚举类型，解析器将识别符号枚举值（带有或不带有引号）而不是数字，例如<code>field:
                    EnumVal</code>。如果字段是积分类型，你仍然可以使用符号名称，但需要在其值前面加上类型，并用引号括起来，例如<code>field:
                    "Enum.EnumVal"</code>。
                  对于表示标志的枚举，你可以将多个放在一个字符串中，用空格分隔，例如<code>field:
                    "EnumVal1 EnumVal2"</code>或
                  <code>field: "Enum.EnumVal1 Enum.EnumVal2"</code>。</li>
                <li>同样，对于联合体，这些需要与代码序列化时相同的方式指定两个字段。例如，对于字段<code>foo</code>，你必须在<code>foo</code>字段之前添加一个<code>foo_type:
                    FooOne</code>字段，其中<code>FooOne</code>是你要使用的联合体中的表。</li>
                <li>一个字段具有值<code>null</code>（例如<code>field:
                    null</code>）被设计为具有该字段的默认值（因此与未指定该字段的效果相同）。</li>
                <li>它有一些内置的转换函数，因此你可以编写例如<code>rad(180)</code>，而不是通常的<code>3.14159</code>。目前支持以下函数：<code>rad</code>、<code>deg</code>、<code>cos</code>、<code>sin</code>、<code>tan</code>、<code>acos</code>、<code>asin</code>、
                  <code>atan</code>。</li>
              </ul>
              <p>解析JSON时，它识别以下字符串中的转义代码：</p>
              <ul>
                <li><code>\n</code> - linefeed。</li>
                <li><code>\t</code> - tab。</li>
                <li><code>\r</code> - carriage return。</li>
                <li><code>\b</code> - backspace。</li>
                <li><code>\f</code> - form feed。</li>
                <li><code>\"</code> - double quote。</li>
                <li><code>\\</code> - backslash。</li>
                <li><code>\/</code> - forward slash。</li>
                <li><code>\uXXXX</code> - 16位Unicode代码点，转换为等效的UTF-8表示。</li>
                <li><code>\xXX</code> -
                  8位二进制十六进制数XX。这是唯一不在JSON规范中的一个（见http://json.org/），但需要能够将任意二进制编码为文本和文本，而不会丢失信息（例如，字节0xFF不能在标准JSON中表示）。</li>
              </ul>
              <p>它还会在生成JSON时生成这些转义代码。</p>
              <p>解析数字时，解析器比JSON更灵活。数字字面量的格式更接近C/C++。根据<a
                  href="../grammar/index.html">语法</a>，它接受以下数字字面量：</p>
              <ul>
                <li>整数字面量可以有任意数量的前导零<code>0</code>。与C/C++不同，解析器忽略前导零，不将其解释为八进制数的开始。数字<code>[081,
                    -00094]</code>等于<code>[81, -94]</code>
                  十进制整数。</li>
                <li>解析器接受无符号和有符号十六进制整数。例如：<code>[0x123, +0x45,
                    -0x67]</code>等于<code>[291, 69, -103]</code>十进制。</li>
                <li>浮点数格式完全兼容C/C++格式。如果使用现代C++编译器，解析器也接受十六进制和特殊浮点数文字：
                  <code>[-1.0, 2., .3e0, 3.e4, 0x21.34p-5, -inf,
                    nan]</code>。</li>
              </ul>
              <p>以下浮点数格式被使用：</p>
              <ul>
                <li>十六进制浮点数后缀是强制性的。</li>
                <li>解析<code>NaN</code>转换为无符号IEEE-754<code>quiet-NaN</code>值。</li>
              </ul>
              <p>扩展浮点支持已在以下环境中测试：</p>
              <ul>
                <li>x64 Windows: <code>MSVC2015</code>和更高版本。</li>
                <li>
                  <p>x64 Linux: <code>LLVM 6.0</code>、<code>GCC
                      4.9</code>和更高版本。</p>
                </li>
                <li>
                  <p>为了与JSONlint工具的兼容性，所有标量字段的数字字面量都可以包装为带引号的字符串：
                    <code>"1", "2.0", "0x48A", "0x0C.0Ep-1", "-inf",
                      "true"</code>。</p>
                </li>
              </ul>
              <h2 id="guidelines">Guidelines（指南）</h2>
              <h3 id="efficiency">Efficiency（效率）</h3>
              <p>FlatBuffers全部关于效率，但为了实现效率，你需要一个高效的架构。通常有多种方法来表示数据，这些方法在大小特征上差异很大。</p>
              <p>现在，表示任何类型的数据作为字典（如JSON）非常普遍，因为它具有灵活性和可扩展性。虽然可以在FlatBuffers中实现这一点（作为具有键和值的表的向量），但这对于像FlatBuffers这样的强类型系统来说是一个糟糕的匹配，导致相对较大的二进制文件。FlatBuffer表比大多数系统中的类/结构体更灵活，因为拥有大量字段，只有少数字段实际使用仍然是高效的。你应该尝试组织数据，使你可以使用表，而不是在可能的情况下使用字典。</p>
              <p>同样，字符串作为值应该只在它们确实是开放式的情况下使用。如果你可以，总是使用枚举。</p>
              <p>FlatBuffers没有继承，所以表示一组相关数据结构的方法是联合体。联合体确实有成本，所以另一种方法是拥有一个包含所有数据结构字段的单个表，如果它们相对相似/共享许多字段，再次，这是高效的，因为非存在字段是廉价的。</p>
              <p>FlatBuffers支持所有整数大小的范围，所以尝试使用最小的尺寸，而不是默认的int/long。</p>
              <p>记住，你可以共享数据（在缓冲区中引用相同的字符串/表），所以将重复数据分解为它们自己的数据结构可能是有价值的。</p>
              <h3 id="style-guide">Style guide（样式指南）</h3>
              <p>模式中的标识符应该翻译成许多不同的编程语言，所以使用"主要"语言的风格通常是一个坏主意。</p>
              <p>出于这个原因，下面是遵循的建议风格，以保持跨语言的互操作性。</p>
              <p>在可能的情况下，特定语言的代码生成器将生成符合语言风格的标识符，基于模式标识符。</p>
              <ul>
                <li>表、结构体、枚举和rpc名称（类型）：UpperCamelCase。</li>
                <li>表和结构体字段名称：snake_case。这被翻译成一些语言的lowerCamelCase，例如Java。</li>
                <li>枚举值：UpperCamelCase。</li>
                <li>命名空间：UpperCamelCase。</li>
              </ul>
              <p>格式（这不太重要，但仍然值得遵守）：</p>
              <ul>
                <li>大括号：与声明的开头在同一行。</li>
                <li>间距：缩进2个空格。在<code>:</code>类型和<code>=</code>之间没有间距。</li>
              </ul>
              <p>例如，请参见此文件顶部的模式。</p>
              <h2 id="gotchas">Gotchas（注意事项）</h2>
              <h3 id="testing-whether-a-field-is-present-in-a-table">Testing
                whether a field is present in a table（测试表中是否存在字段）</h3>
              <p>大多数序列化格式（例如JSON或Protocol
                Buffers）在格式中非常明确地表示字段是否存在，允许你将其用作"额外"信息。</p>
              <p>FlatBuffers不会写入等于其默认值的字段，有时会导致显著的空间节省。然而，这也意味着我们无法区分非存在的意义是"写入的默认值"还是"根本没有写入"。这仅适用于标量字段，因为只有它们支持默认值。除非另有说明，否则它们的默认值为0。</p>
              <p>如果你关心标量存在，大多数语言支持"可选标量"。你可以将<code>null</code>设置为模式中的默认值。<code>null</code>是一个不在所有类型之外的值，所以我们将始终在<code>add_field</code>被调用时写入。生成的字段访问器应该使用本地语言的规范可选类型。</p>
              <p>一些<code>FlatBufferBuilder</code>实现有一个名为<code>force_defaults</code>的选项，
                可以绕过"不写默认值"的行为，然后你可以使用<code>IsFieldPresent</code>来查询存在。 /
                另一种在所有语言中都有效的方法是将标量字段包装在结构体中。这样，如果它不存在，它将返回null。这将稍微不那么直观，但结构体不会比它们表示的标量占用更多空间。</p>

            </article>
          </div>

          <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var labels=set.querySelector(".tabbed-labels");for(var tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script>

          <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
        </div>

      </main>

      <footer class="md-footer">

        <nav class="md-footer__inner md-grid" aria-label="页脚">

          <a href="../flatc/index.html"
            class="md-footer__link md-footer__link--prev"
            aria-label="上一页: Using">
            <div class="md-footer__button md-icon">

              <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path
                  d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z" /></svg>
            </div>
            <div class="md-footer__title">
              <span class="md-footer__direction">
                上一页
              </span>
              <div class="md-ellipsis">
                Using（使用）
              </div>
            </div>
          </a>

          <a href="../evolution/index.html"
            class="md-footer__link md-footer__link--next"
            aria-label="下一页: Evolution">
            <div class="md-footer__title">
              <span class="md-footer__direction">
                下一页
              </span>
              <div class="md-ellipsis">
                Evolution（演变）
              </div>
            </div>
            <div class="md-footer__button md-icon">

              <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path
                  d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11z" /></svg>
            </div>
          </a>

        </nav>

        <div class="md-footer-meta md-typeset">
          <div class="md-footer-meta__inner md-grid">
            <div class="md-copyright">

              <div class="md-copyright__highlight">
                版权所有 &copy; 2025 Google
              </div>

              使用
              <a href="https://squidfunk.github.io/mkdocs-material/"
                target="_blank" rel="noopener">
                Material for MkDocs
              </a>

            </div>

            <div class="md-social">

              <a href="https://github.com/google/flatbuffers" target="_blank"
                rel="noopener" title="github.com" class="md-social__link">
                <svg xmlns="http://www.w3.org/2000/svg"
                  viewBox="0 0 496 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path
                    d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2" /></svg>
              </a>

              <a href="https:///discord.gg/6qgKs3R" target="_blank"
                rel="noopener" title class="md-social__link">
                <svg xmlns="http://www.w3.org/2000/svg"
                  viewBox="0 0 640 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path
                    d="M524.531 69.836a1.5 1.5 0 0 0-.764-.7A485 485 0 0 0 404.081 32.03a1.82 1.82 0 0 0-1.923.91 338 338 0 0 0-14.9 30.6 447.9 447.9 0 0 0-134.426 0 310 310 0 0 0-15.135-30.6 1.89 1.89 0 0 0-1.924-.91 483.7 483.7 0 0 0-119.688 37.107 1.7 1.7 0 0 0-.788.676C39.068 183.651 18.186 294.69 28.43 404.354a2.02 2.02 0 0 0 .765 1.375 487.7 487.7 0 0 0 146.825 74.189 1.9 1.9 0 0 0 2.063-.676A348 348 0 0 0 208.12 430.4a1.86 1.86 0 0 0-1.019-2.588 321 321 0 0 1-45.868-21.853 1.885 1.885 0 0 1-.185-3.126 251 251 0 0 0 9.109-7.137 1.82 1.82 0 0 1 1.9-.256c96.229 43.917 200.41 43.917 295.5 0a1.81 1.81 0 0 1 1.924.233 235 235 0 0 0 9.132 7.16 1.884 1.884 0 0 1-.162 3.126 301.4 301.4 0 0 1-45.89 21.83 1.875 1.875 0 0 0-1 2.611 391 391 0 0 0 30.014 48.815 1.86 1.86 0 0 0 2.063.7A486 486 0 0 0 610.7 405.729a1.88 1.88 0 0 0 .765-1.352c12.264-126.783-20.532-236.912-86.934-334.541M222.491 337.58c-28.972 0-52.844-26.587-52.844-59.239s23.409-59.241 52.844-59.241c29.665 0 53.306 26.82 52.843 59.239 0 32.654-23.41 59.241-52.843 59.241m195.38 0c-28.971 0-52.843-26.587-52.843-59.239s23.409-59.241 52.843-59.241c29.667 0 53.307 26.82 52.844 59.239 0 32.654-23.177 59.241-52.844 59.241" /></svg>
              </a>

              <a href="https://twitter.com/dbaileychess" target="_blank"
                rel="noopener" title="twitter.com" class="md-social__link">
                <svg xmlns="http://www.w3.org/2000/svg"
                  viewBox="0 0 512 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path
                    d="M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8l164.9-188.5L26.8 48h145.6l100.5 132.9zm-24.8 373.8h39.1L151.1 88h-42z" /></svg>
              </a>

            </div>

          </div>
        </div>
      </footer>

    </div>
    <div class="md-dialog" data-md-component="dialog">
      <div class="md-dialog__inner md-typeset"></div>
    </div>

    <script id="__config"
      type="application/json">{"base": "..", "features": ["content.code.annotate", "content.tabs.link", "navigation.expand", "navigation.footer", "header.autohide", "content.action.edit"], "search": "../assets/javascripts/workers/search.f8cc74c7.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>

    <script src="../assets/javascripts/bundle.c8b220af.min.js"></script>

  </body>

  <!-- Mirrored from flatbuffers.dev/schema/ by HTTrack Website Copier/3.x [XR&CO'2014], Thu, 08 May 2025 07:01:57 GMT -->
</html>